home *** CD-ROM | disk | FTP | other *** search
-
- The Official Way to Software Reboot an Amiga - Bryce Nesbitt
-
- * Copyright 1988 Commodore-Amiga, Inc.
- *
- * Executables based on this information may be used in software
- * for Commodore Amiga computers. All other rights reserved.
- * This information is provided "as is"; no warranties are made. All
- * use is at your own risk. No liability or responsibility is assumed.
-
-
- A number of Amiga programmers have had the need to reboot the machine
- from within a program. Since no official guidelines have ever been
- published, programmers have used various creative methods.
-
- Unfortunately rebooting the machine is very tricky, and most attempts
- have been flawed. The RESET instruction, for example, unconfigures
- all memory; after RESET there is no place to run user code!
- Most reboot code will break whenever the memory or CPU configuration
- is changed. Other reset code will not work properly on the Amiga 1000.
- A special sequence of operations is required to work with all the possible
- memory and processor options available for the Amiga.
-
- What follows is the one-and-only official supported way to reboot an Amiga
- under software control.
-
-
-
- ****************************************************************************
- *
- * NAME
- * ColdReboot - reboot the Amiga
- *
- * SYNOPSIS
- * ColdReboot()
- *
- * void ColdReboot(void);
- *
- * FUNCTION
- * Reboot the machine. All external memory and peripherals will be
- * RESET, and the machine will start its power up diagnostics.
- *
- * The MagicResetCode must be used exactly as specified here.
- * The MagicResetCode must be longword aligned. Failure to
- * duplicate the code EXACTLY will result in improper operation
- * under certain system configurations.
- *
- * RESULT
- * This function never returns.
- *
- ****************************************************************************
- XDEF _ColdReboot
-
- XREF _LVOSupervisor
-
- _ColdReboot:
- move.l 4,a6 ;Get a pointer to ExecBase
- lea.l MagicResetCode(pc),a5 ;Location of code to RUN
- jsr _LVOSupervisor(a6) ;RUN code in Supervisor mode
- ;[NOTE: The jsr is required even though Supervisor never returns.]
-
- ;-------------- MagicResetCode ---------DO NOT CHANGE-----------------------
- CNOP 0,4 ;IMPORTANT! Longword align! Do not change!
- MagicResetCode:
- lea.l 2,a0 ;Point to JMP instruction at start of ROM
- RESET ;all RAM goes away now!
- jmp (a0) ;Rely on prefetch to execute this instruction
- ;---------------------------------------DO NOT CHANGE-----------------------
-
- END
-
-
-